package com.agilya.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.agilya.dao.DAOQuestion;
import com.agilya.dao.daointerface.QuestionDAO;
import com.agilya.dao.exception.DAOExceptions;
import com.agilya.modele.Proposition;
import com.agilya.modele.Question;
import com.agilya.utilitaires.Configuration;
import com.agilya.utilitaires.UploadImage;
import com.agilya.utilitaires.UploadImageExceptions;
import com.agilya.utilitaires.UploadImageMauvaisFormatExceptions;
import com.agilya.utilitaires.UploadInterface;

/**
 * Servlet implementation class SaisirQuestion
 * 
 * Permet d'ajouter des propositions à une question
 * 
 */
@WebServlet("/SaisirProposition")
public class SaisirProposition extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Inject
	@DAOQuestion
	private QuestionDAO questiondao;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public SaisirProposition() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Nothing
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		// ****************/
		// Affichage question*/
		// ****************/

		// on récupère l'id de la question qui vient d'être générée
		int idquestion = Integer.parseInt(request.getParameter("idquestion"));
		Question question;
		try {
			question = questiondao.getQuestionById(idquestion);
			request.setAttribute("question", question);

		} catch (DAOExceptions e) {
			request.setAttribute("erreurPage", "Une erreur est survenue, veuillez recommencer plus tard");
			e.printStackTrace();
		}
		RequestDispatcher rd;

		// *************/
		// Upload image*/
		// *************/

		// on récupére l'action
		String action = request.getParameter("action");

		if (action != null && action.equals("uploadImage")) {
			UploadInterface uploadImage = new UploadImage();
			List<String> listFilesNames;
			try {
				listFilesNames = uploadImage.UploadFile(request);

				for (String fileName : listFilesNames) {
					System.out.println(Configuration.getAbsolutePathDossierUploadImage(request) + fileName);
					request.setAttribute("srcImage", Configuration.DOSSIER_UPLOAD_IMAGE + fileName);
				}
			} catch (UploadImageMauvaisFormatExceptions e) {
				System.out.println("problème upload image");
				request.setAttribute("erreurImage", "le format de l'image n'est pas reconnu");

			} catch (UploadImageExceptions e) {
				request.setAttribute("erreurImage", "Un problème est survenu durant l'upload de l'images");
				// Impossible d'enregistrer l'image
				e.printStackTrace();
			}
			request.setAttribute("page", "/saisirQuestion.jsp");
			rd = request.getRequestDispatcher("/page.jsp");
			rd.forward(request, response);
		}

		// ****************/
		// Saisie Propostion*/
		// ****************/

		// liste d'erreurs
		ArrayList<String> listeErreur = new ArrayList<>();

		// action proposition : pour ne pas ajouter une proposition immédiatement après avoir saisi une question
		String actionproposition = request.getParameter("proposition");
		// System.out.println("PARAM actionproposition=" + actionproposition);
		if (actionproposition != null && actionproposition.equals("ajout")) {

			String texte = request.getParameter("texte");
			// System.out.println("texte=" + texte);
			if (texte == null) {
				listeErreur.add("Vous devez saisir un libellé pour la proposition");
			}

			String type_proposition = request.getParameter("type_proposition");
			// System.out.println("type_proposition= " + type_proposition);

			boolean estCorrecte = false;
			boolean estEliminatoire = false;

			if (type_proposition.equals("estCorrecte")) {
				estCorrecte = true;
			}
			if (type_proposition.equals("estEliminatoire")) {
				estEliminatoire = true;
			}

			boolean estActive = true; // à développer

			double coefficient = 1.; // coefficient par défaut à 1

			if (!request.getParameter("coefficient").equals("")) {
				try {
					coefficient = Double.parseDouble(request.getParameter("coefficient"));
				} catch (NumberFormatException nfe) {
					listeErreur.add("Vous devez saisir une valeur numérique");
				}
			}

			// System.out.println("liste erreur vide ? " + listeErreur.isEmpty());

			if (listeErreur.size() == 0) {
				Proposition proposition = new Proposition(texte, estCorrecte, estActive, estEliminatoire, coefficient);
				List<Proposition> listePropositions = null;

				// **********************/
				// Enregistrement et Affichage proposition*/
				// **********************/
				try {
					questiondao.enregistrer(proposition, idquestion);
					listePropositions = questiondao.getAllPropositionsActivesByQuestion(idquestion);
					request.setAttribute("listePropositions", listePropositions);
					System.out.println("liste proposition vide ? " + listePropositions.isEmpty());

				} catch (DAOExceptions e) {
					request.setAttribute("erreurPage", "Une erreur est survenue, veuillez recommencer plus tard");
					e.printStackTrace();
				}
				request.setAttribute("idquestion", idquestion);
				request.setAttribute("page", "/saisirProposition.jsp");
				rd = request.getRequestDispatcher("/page.jsp");
				rd.forward(request, response);

			} else {
				request.setAttribute("erreurs", listeErreur);
				request.setAttribute("idquestion", idquestion);
				request.setAttribute("page", "/saisirProposition.jsp");
				rd = request.getRequestDispatcher("/page.jsp");
				rd.forward(request, response);
			}
		} else {
			request.setAttribute("idquestion", idquestion);
			request.setAttribute("page", "/saisirProposition.jsp");
			rd = request.getRequestDispatcher("/page.jsp");
			rd.forward(request, response);
		}
	}
}
